home *** CD-ROM | disk | FTP | other *** search
-
- incdir "includes:"
- include "misc/DeliPlayer.i"
-
- ;
- ;
- SECTION Player,Code
- ;
- ;
-
- PLAYERHEADER PlayerTagArray
-
- dc.b '$VER: Game Music Creator player module V1.5 (30 Mar 92)',0
- even
-
- PlayerTagArray
- dc.l DTP_PlayerVersion,1
- dc.l DTP_PlayerName,PName
- dc.l DTP_Creator,CName
- dc.l DTP_Check2,Check
- dc.l DTP_Interrupt,Int
- dc.l DTP_InitPlayer,InitPlay
- dc.l DTP_EndPlayer,EndPlay
- dc.l DTP_InitSound,InitSnd
- dc.l DTP_EndSound,RemSnd
- dc.l TAG_DONE
-
- *-----------------------------------------------------------------------*
- ;
- ; Player/Creatorname und lokale Daten
-
- PName dc.b 'G.M.C',0
- CName dc.b 'Andreas Tadic,',10
- dc.b 'adapted by Delirium',0
- even
-
- *-----------------------------------------------------------------------*
- ;
- ;Interrupt für G.M.C Replay
-
- Int
- movem.l d0-d7/a0-a6,-(sp)
- bsr MU_playsong ; DudelDiDum
- movem.l (sp)+,d0-d7/a0-a6
- rts
-
- *-----------------------------------------------------------------------*
- ;
- ; Testet auf GameMusicCreator-Modul
-
- Check
- move.l dtg_ChkData(a5),a0
-
- lea 244(a0),a1 ; Start der Patternsequenz
- move.l 240(a0),d0 ; Anzahl der Pattern
- subq.l #1,d0
- moveq #0,d2
- Chk_bigpat: ; find biggest Pattern
- move.w (a1)+,d1
- cmp.w d1,d2
- bge.s Chk_nobigpat
- move.w d1,d2
- Chk_nobigpat:
- dbf d0,Chk_bigpat
- add.l #444+1024,d2 ; + Patternbeginn + 1 Pattern
- moveq #14,d0
- Chk_calcins:
- tst.l (a0) ; Sample da ?
- beq.s Chk_nocalc ; Nein !
- moveq #0,d1
- move.w 4(a0),d1 ; add sampletable
- lsl.l #1,d1
- add.l d1,d2
- Chk_nocalc:
- lea 16(a0),a0 ; next sample
- dbf d0,Chk_calcins
-
- move.l dtg_ChkSize(a5),d0 ; size of module
- move.l d0,d1
- sub.l #$40,d0 ; - 64 Bytes
- add.l #$40,d1 ; + 64 Bytes
- cmp.l d0,d2
- blt.s Chk_fail ; too small
- cmp.l d1,d2
- bgt.s Chk_fail ; too big
-
- moveq #0,d0 ; Modul erkannt
- bra.s ChkEnd
- Chk_fail
- moveq #-1,d0 ; Modul nicht erkannt
- ChkEnd
- rts
-
- *-----------------------------------------------------------------------*
- ;
- ; Init Player
-
- InitPlay
- move.l dtg_AudioAlloc(a5),a0 ; Function
- jsr (a0) ; returncode is already set !
- rts
-
- *-----------------------------------------------------------------------*
- ;
- ; End Player
-
- EndPlay
- move.l dtg_AudioFree(a5),a0 ; Function
- jsr (a0)
- rts
-
- *-----------------------------------------------------------------------*
- ;
- ; Init Sound
-
- InitSnd
- moveq #0,d0
- move.l dtg_GetListData(a5),a0 ; Function
- jsr (a0)
- bsr MU_startmusic
- rts
-
- *-----------------------------------------------------------------------*
- ;
- ; End Sound
-
- RemSnd
- bsr MU_stopmusic
- rts
-
- *-----------------------------------------------------------------------*
- ;
- ; G.M.C-Replay
-
- *******************************************************
- ******** GameMusicCreator Replay-routine v1.0 *********
- *******************************************************
-
- MU_startmusic:
- move.l a0,MU_data
- move.l a0,MU_tablepos
- move.l a0,MU_songpointer
- add.l #242,MU_tablepos
- add.l #444,MU_songpointer
- move.w #64,MU_patterncount
- clr.w $dff0a8
- clr.w $dff0b8
- clr.w $dff0c8
- clr.w $dff0d8
- move.w #$f,$dff096
- clr.l MU_vol0
- clr.l MU_vol2
- clr.l MU_pospointer
- clr.w MU_songspeed
- clr.w MU_note0
- clr.w MU_note1
- clr.w MU_note2
- clr.w MU_note3
- clr.w MU_slide0
- clr.w MU_slide1
- clr.w MU_slide2
- clr.w MU_slide3
- clr.w MU_stop
- clr.l MU_chan0
- clr.l MU_chan1
- clr.l MU_chan2
- clr.l MU_chan3
- move.w #6,MU_songstep
- move.l a0,a2
- add.l #244,a2
- move.l 240(a0),d1
- sub.l #1,d1
- clr.l d0
- MU_sizeloop:
- move.w (a2)+,d2
- cmp.w d2,d0
- bge MU_nosizeadd
- move.w d2,d0
- MU_nosizeadd:
- dbf d1,MU_sizeloop
- add.l #1024,d0
- move.l a0,a1
- add.l #444,a1
- add.l d0,a1
- move.l #14,d7
- bsr MU_calcins
- ; move.l $6c,MU_oldirq+2 ; schauder !!!
- ; move.l #MU_interrupt,$6c ; würg !!!
- rts
-
- MU_calcins:
- cmp.l #0,(a0)
- bne MU_calcit
- add.l #16,a0
- dbf d7,MU_calcins
- rts
-
- MU_calcit:
- move.l (a0),d0
- move.l 8(a0),d1
- sub.l d0,d1 ;repeat
- move.l a1,(a0)
- move.l a1,d0
- add.l d1,d0
- move.l d0,8(a0) ;set repeat
- cmp.w #2,12(a0)
- bne MU_looping
- move.l #MU_empty,8(a0)
- MU_looping:
- clr.l d0
- move.w 4(a0),d0 ;add sampletable
- lsl.l #1,d0
- add.l d0,a1
- add.l #16,a0
- dbf d7,MU_calcins
- rts
-
- MU_stopmusic:
- ; move.l MU_oldirq+2,$6c ; hilfe !!!
- clr.w $dff0a8
- clr.w $dff0b8
- clr.w $dff0c8
- clr.w $dff0d8
- move.w #$f,$dff096
- rts
-
- ;MU_interrupt:
- ; movem.l d0-d7/a0-a6,-(a7)
- ; btst #5,$dff01f ; kotz !!
- ; beq MU_novertblank
- ; bsr MU_playsong
- ;MU_novertblank:
- ; movem.l (a7)+,d0-d7/a0-a6
- ;MU_oldirq: jmp $0 ; oh weh !!!
-
- MU_playsong:
- bsr MU_everyvert
- add.w #1,MU_songspeed
- move.w MU_songstep,d0
- cmp.w MU_songspeed,d0
- ble MU_okplay
- rts
- MU_okplay:
- clr.w MU_songspeed
- add.w #1,MU_patterncount
- cmp.w #65,MU_patterncount
- bne MU_playit
- MU_setnewpat:
- ******* calc position ****
- add.l #1,MU_pospointer
- move.l MU_pospointer,d0
- move.l MU_data,a5
- cmp.l 240(a5),d0
- bhi MU_setstart
- ***********************
- move.w #1,MU_patterncount
- add.l #2,MU_tablepos
- move.l MU_tablepos,a0
- clr.l d0
- move.w (a0),d0
- move.l MU_data,a0
- add.l #444,a0
- add.l d0,a0
- move.l a0,MU_songpointer
- bra MU_playit
- ************************
- MU_setstart:
- clr.l MU_pospointer
- move.l MU_data,MU_tablepos
- add.l #242,MU_tablepos
- bra MU_setnewpat
- MU_playit:
- move.l MU_songpointer,a0
- add.l #16,MU_songpointer
- move.l (a0),d0
- clr.w d3
- move.w #1,d2
- bsr MU_setinstr
- bsr MU_seteffect
- move.l 4(a0),d0
- move.w #2,d2
- bsr MU_setinstr
- bsr MU_seteffect
- move.l 8(a0),d0
- move.w #3,d2
- bsr MU_setinstr
- bsr MU_seteffect
- move.l 12(a0),d0
- move.w #4,d2
- bsr MU_setinstr
- bsr MU_seteffect
- move.w d3,$dff096
- rts
-
- MU_setinstr:
- move.w d0,d5
- and.w #$f000,d0
- cmp.w #0,d0
- bne MU_setit
- rts
-
- MU_setit:
- swap d0
- move.w d0,d1
- clr.w d0
- swap d0
- lsr.w #8,d0
- lsr.w #4,d0
- sub.w #1,d0
- lsl.w #4,d0
- move.l MU_data,a6
- add.l d0,a6
- cmp.w #1,d2
- bne MU_conti1
- clr.w $dff0a8
- move.l a6,MU_chan0
- move.l (a6),$dff0a0
- move.w 4(a6),$dff0a4
- move.w d1,$dff0a6
- move.w d1,MU_note0
- move.w 6(a6),MU_vol0
- clr.w MU_slide0
- bset #0,d3
- rts
-
- MU_conti1:
- cmp.w #2,d2
- bne MU_conti2
- clr.w $dff0b8
- move.l a6,MU_chan1
- move.l (a6),$dff0b0
- move.w 4(a6),$dff0b4
- move.w d1,$dff0b6
- move.w d1,MU_note1
- move.w 6(a6),MU_vol1
- clr.w MU_slide1
- bset #1,d3
- rts
-
- MU_conti2:
- cmp.w #3,d2
- bne MU_conti3
- clr.w $dff0c8
- move.l a6,MU_chan2
- move.l (a6),$dff0c0
- move.w 4(a6),$dff0c4
- move.w d1,$dff0c6
- move.w d1,MU_note2
- move.w 6(a6),MU_vol2
- clr.w MU_slide2
- bset #2,d3
- rts
-
- MU_conti3:
- clr.w $dff0d8
- move.l a6,MU_chan3
- move.l (a6),$dff0d0
- move.w 4(a6),$dff0d4
- move.w d1,$dff0d6
- move.w d1,MU_note3
- move.w 6(a6),MU_vol3
- clr.w MU_slide3
- bset #3,d3
- rts
-
- MU_seteffect:
- move.w d5,d6
- and.w #$00ff,d5
- and.w #$0f00,d6
- cmp.w #0,d6
- beq MU_effjump2
- cmp.w #$0100,d6
- beq MU_slideup
- cmp.w #$0200,d6
- beq MU_slidedown
- cmp.w #$0300,d6
- beq MU_setvolume
- cmp.w #$0500,d6
- beq MU_posjump
- cmp.w #$0400,d6
- bne MU_nobreak
- MU_itsabreak:
- move.w #64,MU_patterncount
- rts
-
- MU_nobreak:
- cmp.w #$0800,d6
- bne MU_effjump0
- move.w d5,MU_songstep
- rts
-
- MU_effjump0:
- cmp.w #$0600,d6
- bne MU_effjump1
- bclr #1,$bfe001
- rts
-
- MU_effjump1:
- cmp.w #$0700,d6
- bne MU_effjump2
- bset #1,$bfe001
- MU_effjump2:
- rts
-
- MU_posjump:
- clr.l d4
- move.w d5,d4
- sub.l #1,d4
- move.l d4,MU_pospointer
- add.l #1,d4
- lsl.w #1,d4
- sub.w #2,d4
- move.l MU_data,a0
- add.l #244,a0
- add.l d4,a0
- move.l a0,MU_tablepos
- bra MU_itsabreak
- MU_slideup:
- neg.w d5
- MU_slidedown:
- cmp.w #1,d2
- bne MU_j1
- move.w d5,MU_slide0
- rts
-
- MU_j1:
- cmp.w #2,d2
- bne MU_j2
- move.w d5,MU_slide1
- rts
-
- MU_j2:
- cmp.w #3,d2
- bne MU_j3
- move.w d5,MU_slide2
- rts
-
- MU_j3:
- move.w d5,MU_slide3
- rts
-
- MU_setvolume:
- cmp.w #1,d2
- bne MU_j00
- move.w d5,MU_vol0
- ;move.w d5,$dff0a8
- rts
-
- MU_j00:
- cmp.w #2,d2
- bne MU_j22
- move.w d5,MU_vol1
- ;move.w d5,$dff0b8
- rts
-
- MU_j22:
- cmp.w #3,d2
- bne MU_j33
- move.w d5,MU_vol2
- ;move.w d5,$dff0c8
- rts
-
- MU_j33:
- move.w d5,MU_vol3
- ;move.w d5,$dff0d8
- rts
-
- MU_everyvert:
- move.w MU_slide0,d0
- add.w d0,MU_note0
- move.w MU_note0,$dff0a6
- move.w MU_slide1,d0
- add.w d0,MU_note1
- move.w MU_note1,$dff0b6
- move.w MU_slide2,d0
- add.w d0,MU_note2
- move.w MU_note2,$dff0c6
- move.w MU_slide3,d0
- add.w d0,MU_note3
- move.w MU_note3,$dff0d6
- btst #0,MU_stop
- beq MU_ok1
- bclr #0,MU_stop
- move.l MU_chan0,a0
- move.l 8(a0),$dff0a0
- move.w 12(a0),$dff0a4
- clr.l MU_chan0
- MU_ok1:
- btst #1,MU_stop
- beq MU_ok2
- bclr #1,MU_stop
- move.l MU_chan1,a0
- move.l 8(a0),$dff0b0
- move.w 12(a0),$dff0b4
- clr.l MU_chan1
- MU_ok2:
- btst #2,MU_stop
- beq MU_ok3
- bclr #2,MU_stop
- move.l MU_chan2,a0
- move.l 8(a0),$dff0c0
- move.w 12(a0),$dff0c4
- clr.l MU_chan2
- MU_ok3:
- btst #3,MU_stop
- beq MU_ok4
- bclr #3,MU_stop
- move.l MU_chan3,a0
- move.l 8(a0),$dff0d0
- move.w 12(a0),$dff0d4
- clr.l MU_chan3
- MU_ok4:
- move.w #$8000,d3
- cmp.l #0,MU_chan0
- beq MU_okk1
- bset #0,MU_stop
- bset #0,d3
- MU_okk1:
- cmp.l #0,MU_chan1
- beq MU_okk2
- bset #1,MU_stop
- bset #1,d3
- MU_okk2:
- cmp.l #0,MU_chan2
- beq MU_okk3
- bset #2,MU_stop
- bset #2,d3
- MU_okk3:
- cmp.l #0,MU_chan3
- beq MU_okk4
- bset #3,MU_stop
- bset #3,d3
- MU_okk4:
- move.w d3,$dff096
- move.w MU_vol0,$dff0a8
- move.w MU_vol1,$dff0b8
- move.w MU_vol2,$dff0c8
- move.w MU_vol3,$dff0d8
- rts
-
- ********** variables *****
- MU_stop: dc.w 0
- MU_slide0: dc.w 0
- MU_slide1: dc.w 0
- MU_slide2: dc.w 0
- MU_slide3: dc.w 0
- MU_chan0: dc.l 0
- MU_chan1: dc.l 0
- MU_chan2: dc.l 0
- MU_chan3: dc.l 0
- MU_note0: dc.w 0
- MU_note1: dc.w 0
- MU_note2: dc.w 0
- MU_note3: dc.w 0
- MU_vol0: dc.w 0
- MU_vol1: dc.w 0
- MU_vol2: dc.w 0
- MU_vol3: dc.w 0
- MU_songspeed: dc.w 0
- MU_songstep: dc.w 5
- MU_patterncount: dc.w 0
- MU_songpointer: dc.l 0
- MU_tablepos: dc.l 0
- MU_pospointer: dc.l 0
- MU_data: dc.l 0
-
- ;
- ;
- SECTION GMCData,Data_C
- ;
- ;
-
- MU_empty: dcb.l 2,0
-
- *************************************************
- *************************************************
-
-